package com.lx.common.utils;

import cn.hutool.core.util.ReflectUtil;
import com.lx.constant.consts.CommonConstant;

import javax.persistence.Column;
import javax.persistence.Transient;
import java.util.Arrays;
import java.util.stream.Collectors;

/**
 * SQL 工具类
 *
 * @author lx
 * @create 2022/12/14 17:27
 **/
public class SqlUtil {

    /**
     * 通过实体类对象 获取SQL列名拼接
     * 如果存在Column.class，适用于其解析
     *
     * @param entityClass
     * @return
     */
    public static String getSQLColumnNameByEntity(Class<?> entityClass) {
        if (entityClass == null) {
            return CommonConstant.ASTERISK;
        }
        return Arrays.stream(ReflectUtil.getFields(entityClass)).filter(v1 -> {
            if (null != v1.getAnnotation(Transient.class)) {
                return false;
            }
            if ("serialVersionUID".equals(v1.getName())) {
                return false;
            }
            return true;
        }).map(v1 -> {
            Column annotation = v1.getAnnotation(Column.class);
            return annotation == null ? v1.getName() : annotation.name();
        }).collect(Collectors.joining(CommonConstant.COMMA));
    }

}
